home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / dataio.arc / SELF1.ASM < prev    next >
Encoding:
Assembly Source File  |  1985-04-12  |  21.6 KB  |  453 lines

  1.        TITL 'SELF TEST CODE FOR TMS320C10'
  2.        IDT  'SELF'
  3. ************************************************************
  4. *                                                          *
  5. *   THIS PROGRAM EXECUTES AN INTERNAL SELFTEST OF THE      *
  6. *   TMS32010 MICROCOMPUTER.  THE TEST IS WRITTEN TO        *
  7. *   EXECUTE IN ON-CHIP ROM AND UPON COMPLETION EXIT        *
  8. *   TO OFF-CHIP PROGRAM MEMORY AT >600.  IF AN ERROR       *
  9. *   OCCURS THE ERROR CODE WILL RESIDE IN DATA MEMORY       *
  10. *   WORD ZERO.  IF NO ERRORS OCCUR THEN DATA MEMORY        *
  11. *   WILL BE INITIALIZED TO ZERO                            *
  12. *                                                          *
  13. *   PROGRAM WRITTEN BY PETER EHLIG                         *
  14. *                      04/12/85                            *
  15. *                      REVISION 1.1                        *
  16. *                                                          *
  17. ************************************************************
  18.        DEF  START
  19.        REF  ENDCD
  20.        RORG 0
  21. *                                                          *
  22. *   RESET AND INTERRUPT VECTORS                            *
  23. *                                                          *
  24. BEGIN  B    START          RESET SOFT VECTOR
  25.        B    INTRPT         INTERRUPT SOFT VECTOR
  26. *                                                          *
  27. *   REQUIRED DATA VALUES FOR TEST PROGRAMS                 *
  28. *                                                          *
  29. RAMPT1 DATA >FFFF          RAM TEST PATTERN 1
  30. RAMPT2 DATA >AAAA          RAM TEST PATTERN 2
  31. RAMPT3 DATA >5555          RAM TEST PATTERN 3
  32. RAMPT4 DATA 0              RAM TEST PATTERN 4
  33. CODL   DATA ENDCD-1        STORE ADDRESS OF END OF CODE
  34. LRDADD DATA >EC71          LONGITUDINAL REDUNDANCY ADDER
  35. CSVAL  DATA 0              CHECKSUM ADDER
  36. MULTBL EQU  $
  37.        DATA >6F11          FOURTH T VALUE
  38.        DATA >22F           THIRD T VALUE
  39.        DATA >114E          SECOND T VALUE
  40.        DATA >2000          FIRST T VALUE
  41.        DATA >F058          LOW ANSWER
  42.        DATA >148           HIGH ANSWER
  43.        DATA >21            FOURTH D VALUE
  44.        DATA >3FE1          THIRD D VALUE
  45.        DATA >112           SECOND D VALUE
  46.        DATA >640           FIRST D VALUE
  47. *                                                          *
  48. *   PROGRAM INITIALIZATION  DP = 0 AND DISABLE INTERRUPTS  *
  49. *                                                          *
  50. START  EQU  $              START INITIALIZATION ROUTINE
  51.        LDPK 0              START IN ZERO DATA PAGE
  52.        DINT                DISABLE EXTERNAL INTERRUPTS
  53.        PAGE
  54. *                                                          *
  55. *   TEST AUXILIARY REGISTERS                               *
  56. *                                                          *
  57. AUXTST EQU  $              AUXILIARY REGISTER COUNTER TEST
  58.        LARP 0              POINT TO AUXILIARY REGISTER 0
  59.        LARK 0,>7F          LOAD AUX0 WITH TEST PATTERN
  60.        MAR  *+             INCREMENT PATTERN
  61.        SAR  0,1            SAVE VALUE
  62.        LACK >80            SET COMPARE MASK
  63.        XOR  1              COMPARE BITS
  64.        BZ   AUX00          IF = TO MASK THEN CONTINUE TEST
  65.        LACK 4              ELSE, LOAD IN ERROR CODE 4
  66.        B    ERROR          EXIT TO ERROR EXIT
  67. AUX00  EQU  $
  68.        MAR  *-             DECREMENT PATTERN
  69.        SAR  0,1            SAVE VALUE
  70.        LACK >7F            SET COMPARE MASK
  71.        XOR  1              COMPARE BITS
  72.        BZ   AUX10          IF = TO MASK THEN CONTINUE TEST
  73.        LACK 5              ELSE, LOAD IN ERROR CODE 5
  74.        B    ERROR          AND EXIT TO ERROR
  75. AUX10  EQU  $
  76.        LARP 1              POINT TO AUXILIARY REGISTER 1
  77.        LARK 1,>7F          LOAD AUX1 WITH TEST PATTERN
  78.        MAR  *+             INCREMENT PATTERN
  79.        SAR  1,1            SAVE VALUE
  80.        LACK >80            SET COMPARE MASK
  81.        XOR  1              COMPARE BITS
  82.        BZ   AUX11          IF = TO MASK THEN CONTINUE TEST
  83.        LACK 6              ELSE, LOAD IN ERROR CODE 6
  84.        B    ERROR          EXIT TO ERROR EXIT
  85. AUX11  EQU  $
  86.        MAR  *-             DECREMENT PATTERN
  87.        SAR  1,1            SAVE VALUE
  88.        LACK >7F            SET COMPARE MASK
  89.        XOR  1              COMPARE BITS
  90.        BZ   RAM            IF = TO MASK THEN CONTINUE TEST
  91.        LACK 7              ELSE, LOAD IN ERROR CODE 7
  92.        B    ERROR          AND EXIT TO ERROR
  93.        PAGE
  94. *                                                          *
  95. *   DATA RAM TEST                                          *
  96. *                                                          *
  97. RAM    EQU  $
  98.        LACK RAMPT1         GET RAM PATTERN 1 ADDRESS
  99.        SACL 0              SAVE PATTERN ADDRESS IN REG0
  100.        CALL RAMLP0         CALL RAM TEST
  101.        LACK RAMPT2         GET RAM PATTERN 2 ADDRESS
  102.        SACL 0              SAVE PATTERN ADDRESS IN REG0
  103.        CALL RAMLP0         CALL RAM TEST
  104.        LACK RAMPT3         GET RAM PATTERN 3 ADDRESS
  105.        SACL 0              SAVE PATTERN ADDRESS IN REG0
  106.        CALL RAMLP0         CALL RAM TEST
  107.        LACK RAMPT4         GET RAM PATTERN 4 ADDRESS
  108.        SACL 0              SAVE PATTERN ADDRESS IN REG0
  109.        CALL RAMLP0         CALL RAM TEST
  110.        B    ROM            NO ERRORS, BRANCH TO ROM TEST
  111. RAMLP0 LARK 1,>8F          POINT TO LAST WORD IN DATA RAM
  112.        ZALS 0              GET PATTERN ADDRESS
  113.        TBLR 0              TRANSFER RAM PATTERN ONE TO DMA0
  114.        ZALS 0              LOAD ACC WITH RAM PATTERN
  115. RAMLP1 SACL *              STORE PATTERN IN DATA RAM
  116.        BANZ RAMLP1         IF AUX0 <> 0 THEN CONTINUE
  117.        LARK 1,>8F          POINT TO LAST WORD IN DATA RAM
  118. RAMLP2 ZALS 0              LOAD IN COMPARE MASK
  119.        XOR  *              COMPARE BITS
  120.        BNZ  RAMERR         IF <> 0 GOTO RAM ERROR HANDLER
  121.        BANZ RAMLP2         ELSE CONTINUE TEST
  122.        RET                 RETURN FROM CALL
  123. RAMERR EQU  $
  124.        LACK >FF            LOAD ACC WITH LARGEST IMMEDIATE
  125.        MAR  *+             GET ADDRESS OF FAILED RAM
  126.        SAR  1,0            STORE THE ADDRESS
  127.        ADD  0              INTO THE ACCUMULATOR
  128.        B    ERROR          EXIT TO ERROR HANDLER
  129.        PAGE
  130. *                                                          *
  131. *   PROGRAM ROM TEST   (LONGITUDINAL REDUNDANCY)           *
  132. *                                                          *
  133. ROM    EQU  $
  134.        LACK 1              GET DECREMENT VALUE
  135.        SACL 3              AND STORE IT FOR LATTER
  136.        LACK 8              GET ADDRESS OF CODE END
  137.        TBLR 0              AND LOAD IT IN DMA0
  138.        ZALS 0              AND ALSO IN THE ACCUMULATOR
  139. ROMLP1 TBLR 1              READ PROGRAM CODE WORD
  140.        ZALS 2              LOAD IN CURRENT LRC VALUE
  141.        XOR  1              XOR IT WITH NEW PROGRAM WORD
  142.        SACL 2              SAVE THE ADJUSTED LRC VALUE
  143.        LAC  0              LOAD IN CURRENT PROGRAM ADDRESS
  144.        SUB  3              DECREMENT IT
  145.        SACL 0              STORE NEW COUNT
  146.        BGEZ ROMLP1         IF NOT FINISHED CONTINUE
  147.        ZALS 2              GET CALCULATED LRC
  148.        BZ   ALU            IF = ZERO THEN GO TO ALU TEST
  149.        LACK >C0            LOAD ACC WITH ERROR CODE
  150.        SACL 0              STORE VALUE FOR SHIFT
  151.        LAC  0,4            SET ERROR VALUE TO >C00
  152.        B    ERROR          BRANCH TO ERROR EXIT
  153.        PAGE
  154. *                                                          *
  155. *   ARITHMETIC LOGIC UNIT TEST                             *
  156. *                                                          *
  157. ALU    EQU  $
  158.        LACK 1              GET INCREMENT VALUE
  159.        SACL 8              STORE IT IN REG8
  160.        LACK 4              POINT ACC TO PATTERNS TABLE
  161.        TBLR 4              PUT TABLE VALUE IN REG4
  162.        ADD  8              INCREMENT TABLE ADDRESS
  163.        TBLR 5              PUT TABLE VALUE IN REG5
  164.        ADD  8              INCREMENT TABLE ADDRESS
  165.        TBLR 6              PUT TABLE VALUE IN REG6
  166.        ADD  8              INCREMENT TABLE ADDRESS
  167.        TBLR 7              PUT TABLE VALUE IN REG7
  168.        LACK >10            SET ERROR CODE VALUE
  169.        SACL 2              STORE CODE IN REG 2
  170. ALU1   ZAC                 CLEAR OUT ACCUMULATOR
  171.        ADDS 5              ADD IN >AAAA PATTERN
  172.        AND  5              AND WITH >AAAA PATTERN
  173.        OR   6              OR WITH >5555 PATTERN
  174.        SUBS 4              SUBTRACT -1 FROM PATTERN
  175.        BZ   ALU2           IF ACC CLEARED GO TO NEXT TEST
  176.        LACK 1              IF NOT THEN SET TEST 1 CODE
  177.        ADD  2,8            ADD IN ERROR CODE
  178.        B    ERROR          EXIT TO ERROR ROUTINE
  179. ALU2   ZALH 5              ADD HIGH THE >AAAA PATTERN
  180.        ADDH 6              SUBTRACT HIGH THE >5555 PATTERN
  181.        SACH 0              SAVE THE VALUE
  182.        ZALH 0              RESTORE THE VALUE
  183.        ABS                 TAKE ABSOLUTE VALUE
  184.        SUBH 8              SUBTRACT HIGH >10000
  185.        BZ   ALU3           IF ACC CLEARED GO TO NEXT TEST
  186.        LACK 2              IF NOT THEN SET TEST CODE 2
  187.        ADD  2,8            ADD IN ERROR CODE
  188.        B    ERROR          EXIT TO ERROR ROUTINE
  189. ALU3   LAC  4,12           LOAD ACC WITH >FFFFF000 PATTERN
  190.        ADD  8,12           ADD >00001000 TO IT
  191.        BZ   ALU4           IF ACC CLEARED GO TO NEXT TEST
  192.        LACK 3              IF NOT THEN SET TEST 3 CODE
  193.        ADD  2,8            ADD IN ERROR CODE
  194.        B    ERROR          EXIT TO ERROR ROUTINE
  195. ALU4   ADD  4              LOAD ACC WITH >FFFFFFFF PATTERN
  196.        ABS                 TAKE ABSOLUTE VALUE
  197.        SUB  8              SUBTRACT >00000001
  198.        BZ   ALU5           IF ACC CLEARED GO TO NEXT TEST
  199.        LACK 4              IF NOT THEN SET TEST 4 CODE
  200.        ADD  2,8            ADD IN ERROR CODE
  201.        B    ERROR          EXIT TO ERROR ROUTINE
  202. ALU5   LACK >40            GET DIVISOR = 64
  203.        SACL 0              SAVE IN REG0
  204.        LACK >FF            GET DIVIDEND = 255
  205.        SUBC 0              FIRST STAGE OF DIVIDE
  206.        NOP                 REQUIRED NOP
  207.        SUBC 0              SECOND STAGE OF DIVIDE
  208.        NOP                 REQUIRED NOP
  209.        SUBC 0              THIRD STAGE OF DIVIDE
  210.        NOP                 REQUIRED NOP
  211.        SUBC 0              FOURTH STAGE OF DIVIDE
  212.        NOP                 REQUIRED NOP
  213.        SUBC 0              FIFTH STAGE OF DIVIDE
  214.        NOP                 REQUIRED NOP
  215.        SUBC 0              SIXTH STAGE OF DIVIDE
  216.        NOP                 REQUIRED NOP
  217.        SUBC 0              SEVENTH STAGE OF DIVIDE
  218.        NOP                 REQUIRED NOP
  219.        SUBC 0              8TH STAGE OF DIVIDE
  220.        NOP                 REQUIRED NOP
  221.        SUBC 0              9TH STAGE OF DIVIDE
  222.        NOP                 REQUIRED NOP
  223.        SUBC 0              10TH STAGE OF DIVIDE
  224.        NOP                 REQUIRED NOP
  225.        SUBC 0              11TH STAGE OF DIVIDE
  226.        NOP                 REQUIRED NOP
  227.        SUBC 0              12TH STAGE OF DIVIDE
  228.        NOP                 REQUIRED NOP
  229.        SUBC 0              13TH STAGE OF DIVIDE
  230.        NOP                 REQUIRED NOP
  231.        SUBC 0              14TH STAGE OF DIVIDE
  232.        NOP                 REQUIRED NOP
  233.        SUBC 0              15TH STAGE OF DIVIDE
  234.        NOP                 REQUIRED NOP
  235.        SUBC 0              16TH STAGE OF DIVIDE
  236.        NOP                 REQUIRED NOP
  237.        SACH 1              SAVE REMAINDER
  238.        SACL 2              SAVE QUOTIENT
  239.        LACK 3              GET QUOTIENT COMPARISON MASK
  240.        XOR  2              COMPARE WITH CALCULATED ANSWER
  241.        BZ   ALU6           IF ACC CLEARED GO TO NEXT TEST
  242.        LACK 5              IF NOT THEN SET TEST 5 CODE
  243.        ADD  2,8            ADD IN ERROR CODE
  244.        B    ERROR          EXIT TO ERROR ROUTINE
  245. ALU6   LACK >3F            GET REMAINDER COMPARISON MASK
  246.        XOR  1              COMPARE WITH ANSWER
  247.        BZ   STATUS         IF ACC CLEARED GO TO NEXT TEST
  248.        LACK 6              IF NOT THEN SET TEST 6 CODE
  249.        ADD  2,8            ADD IN ERROR CODE
  250.        B    ERROR          EXIT TO ERROR ROUTINE
  251.        PAGE
  252. *                                                          *
  253. *   STATUS REGISTER AND CONDITIONAL BRANCH TEST            *
  254. *                                                          *
  255. STATUS EQU  $
  256.        LAC  4              GET >FFFF PATTERN FOR TEST
  257.        BGZ  BERR           IF > 0 THEN ERROR
  258.        BZ   BERR           IF = 0 THEN ERROR
  259.        BV   BERR           IF OVERFLOW THEN ERROR
  260.        BLZ  ST2            IF < 0 THEN TEST 1 PASSES
  261.        B    BERR           ELSE ERROR
  262. ST2    BLEZ ST3            IF <= 0 THEN TEST 2 PASSES
  263.        B    BERR           ELSE ERROR
  264. ST3    ZAC                 CLEAR ACC
  265.        BGZ  BERR           IF > 0 THEN ERROR
  266.        BLZ  BERR           IF < 0 THEN ERROR
  267.        BNZ  BERR           IF <> 0 THEN ERROR
  268.        BV   BERR           IF OVERFLOW THEN ERROR
  269.        BZ   ST4            IF = 0 THEN TEST 3 PASSES
  270.        B    BERR           ELSE ERROR
  271. ST4    BLEZ ST5            IF <= 0 THEN TEST 4 PASSES
  272.        B    BERR           ELSE ERROR
  273. ST5    BGEZ ST6            IF >= 0 THEN TEST 5 PASSES
  274.        B    BERR           ELSE ERROR
  275. ST6    LAC  6              LOAD IN >5555 PATTERN
  276.        BLEZ BERR           IF <= 0 THEN ERROR
  277.        BLZ  BERR           IF < 0 THEN ERROR
  278.        BZ   BERR           IF = 0 THEN ERROR
  279.        BV   BERR           IF OVERFLOW THEN ERROR
  280.        BGZ  ST7            IF > 0 THEN TEST 6 PASSES
  281.        B    BERR           ELSE ERROR
  282. ST7    BGEZ ST8            IF >= 0 THEN TEST 7 PASSES
  283.        B    BERR           ELSE ERROR
  284. ST8    BNZ  ST9            IF <> 0 THEN TEST 8 PASSES
  285.        B    BERR           ELSE ERROR
  286. ST9    ROVM                TURN OFF OVERFLOW SATURATION
  287.        LAC  4              LOAD HIGH ACC WITH >FFFFFFFF
  288.        ADDH 6              ADD >55550000
  289.        BV   BERR           IF OVERFLOW THEN ERROR
  290.        ADDH 6              ADD >55550000 AGAIN
  291.        SST  0              STORE STATUS FOR TEST 11
  292.        BV   ST10           IF OVERFLOW THEN TEST 9 PASSED
  293.        B    BERR           ELSE ERROR
  294. ST10   BV   BERR           IF STILL OVERFLOW THEN ERROR
  295.        ADDH 5              ADD >AAAA0000
  296.        BV   ST11           IF UNDERFLOW THEN TEST 10 PASSED
  297.        B    BERR           ELSE ERROR
  298. ST11   BV   BERR           IF STILL UNDERFLOW THEN ERROR
  299.        LDP  1              GO TO DATA PAGE 1
  300.        LST  0              GET SAVED STATUS
  301.        BV   ST12           IF OVERFLOW THEN TEST 11 PASSED
  302.        B    BERR           ELSE ERROR
  303. ST12   SOVM                SET ACCUMULATOR TO OVERFLOW MODE
  304.        ZALH 6              LOAD ACC WITH >55550000 PATTERN
  305.        ADDH 6              ADD >55550000 TO ACC
  306.        BV   ST13           IF OVERFLOW THEN PASS TEST 12
  307.        B    BERR           ELSE ERROR
  308. ST13   SACH 1              STORE THE HIGH ACCUMULATOR
  309.        SACL 2              STORE LOW ACCUMULATOR
  310.        ZALS 4              GET COMPARE PATTERN MASK
  311.        XOR  2              AND CHECK ANSWER
  312.        BNZ  BERR           IF NOT >FFFF THEN ERROR
  313.        ZALS 4              GET COMPARE PATTERN MASK
  314.        SUB  8,15           MODIFY TO >7FFF
  315.        XOR  1              AND CHECK ANSWER
  316.        BNZ  BERR           IF NOT >7FFF THEN ERROR
  317.        ZALH 5              LOAD ACC WITH >55550000 PATTERN
  318.        ADDH 5              ADD >55550000 TO ACC
  319.        BV   ST14           IF OVERFLOW THEN PASS TEST 12
  320.        B    BERR           ELSE ERROR
  321. ST14   SACH 1              STORE THE HIGH ACCUMULATOR
  322.        SACL 2              STORE LOW ACCUMULATOR
  323.        ZAC                 GET COMPARE PATTERN MASK
  324.        XOR  2              AND CHECK ANSWER
  325.        BNZ  BERR           IF NOT >0000 THEN ERROR
  326.        LAC  8,15           GET COMPARE PATTERN MASK
  327.        XOR  1              AND CHECK ANSWER
  328.        BZ   SHIFT          IF NOT >8000 THEN ERROR
  329.        ROVM                TURN OFF OVERFLOW SATURATION MODE
  330. BERR   EQU  $
  331.        LACK >20            GET ERROR CODE
  332.        SACL 0              STORE FOR SHIFT
  333.        LAC  0,8            SET ERROR CODE TO >2000
  334.        B    ERROR          EXIT TO ERROR HANDLER
  335.        PAGE
  336. *                                                          *
  337. *   SHIFTER TESTS                                          *
  338. *                                                          *
  339. SHIFT  ROVM                TURN OFF OVERFLOW SATURATION MODE
  340.        LAC  8,15           LOAD ACC WITH >00008000
  341.        SACH 0,1            SHIFT ACC ONE BIT AND MOVE
  342.        ZALS 0              HIGH ACC TO LOW ACC
  343.        XOR  8              COMPARE IT TO MASK
  344.        BNZ  SFTERR         IF <> THEN ERROR
  345.        LAC  8,12           LOAD ACC WITH >00001000
  346.        SACH 0,4            SHIFT ACC 4 BITS AND MOVE
  347.        ZALS 0              HIGH ACC TO LOW ACC
  348.        XOR  8              COMPARE IT TO MASK
  349.        BZ   MULT           IF EQUAL CONTINUE TEST
  350. SFTERR LACK >30            GET ERROR CODE VALUE
  351.        SACL 0              AND SHIFT IT TO
  352.        LAC  0,8            BE >3000
  353.        B    ERROR          THEN BRANCH TO ERROR
  354.        PAGE
  355. *                                                          *
  356. *   MULTIPLIER HARDWARE TEST                               *
  357. *                                                          *
  358. MULT   EQU  $
  359.        LARK 0,17           SET UP FOR T TABLE READ
  360.        LARP 0              RUN FROM AUX 0
  361.        LACK MULTBL         POINT TO MULTIPLY TABLE
  362.        TBLR *+             GET FIRST MULTIPLICAND
  363.        ADD  8              INCREMENT TABLE POINTER
  364.        TBLR *+             GET SECOND MULTIPLICAND
  365.        ADD  8              INCREMENT TABLE POINTER
  366.        TBLR *+             GET THIRD MULTIPLICAND
  367.        ADD  8              INCREMENT TABLE POINTER
  368.        TBLR *,1            GET FOURTH MULTIPLICAND
  369.        ADD  8              INCREMENT TABLE POINTER
  370.        LARK 1,35           SET UP FOR D TABLE READ
  371.        TBLR *+             GET LOW ACC ANSWER
  372.        ADD  8              INCREMENT TABLE POINTER
  373.        TBLR *+             GET HIGH ACC ANSWER
  374.        ADD  8              INCREMENT TABLE POINTER
  375.        TBLR *+             GET FIRST MULTIPLICAND
  376.        ADD  8              INCREMENT TABLE POINTER
  377.        TBLR *+             GET SECOND MULTIPLICAND
  378.        ADD  8              INCREMENT TABLE POINTER
  379.        TBLR *+             GET THIRD MULTIPLICAND
  380.        ADD  8              INCREMENT TABLE POINTER
  381.        TBLR *,0            GET FOURTH MULTIPLICAND
  382.        LT   *-,1           MULTIPY FIRST T VALUE
  383.        MPY  *-,0           TIMES FIRST D VALUE
  384.        PAC                 PACK PRODUCT TO ACC
  385.        LT   *-,1           MULTIPLY SECOND T VALUE
  386.        MPY  *-,0           TIMES SECOND D VALUE
  387.        LTA  *-,1           ACC PRODUCT AND MULTIPLY 3RD
  388.        MPY  *-,0           T VALUE TIMES THIRD D VALUE
  389.        LTD  *,1            ACC PRODUCT AND MULTIPLY 4TH
  390.        MPY  *-             T VALUE TIMES 4TH D VALUE
  391.        APAC                ACCUMULATE THE PRODUCT
  392.        MPYK >64            MULTIPLY 64 TIMES 4TH T VALUE
  393.        SPAC                SUBTRACT PRODUCT FROM ACC
  394.        SACH 0              SAVE THE HIGH ACC
  395.        SACL 1              SAVE THE LOW ACC
  396.        ZALS *-             GET HIGH ANSWER MASK
  397.        XOR  0              COMPARE IT WITH HIGH ANSWER
  398.        BNZ  MLTERR         IF <> 0 THEN ERROR
  399.        ZALS *,0            GET LOW ANSWER MASK
  400.        XOR  1              COMPARE IT WITH LOW ANSWER
  401.        BNZ  MLTERR         IF <> 0 THEN ERROR
  402.        ZALS *+             GET ORIGINAL DATA AND
  403.        XOR  *              COMPARE IT TO DMOV DATA
  404.        BZ   OTHER          IF = THEN TEST PASSES
  405. MLTERR LACK >40            SET VALUE FOR ERROR CODE
  406.        SACL 2              SHIFT THE ERROR VALUE 8
  407.        LAC  2,8            BITS TO GET ERROR CODE >4000
  408.        B    ERROR          AND EXIT TO ERROR ROUTINE
  409.        PAGE
  410. *                                                          *
  411. *   THE REST OF INSTRUCTIONS TEST                          *
  412. *                                                          *
  413. OTHER  EQU  $
  414.        LDP  8              SET DP TO ONE
  415.        SST  0              STORE STATUS
  416.        ZALS 0              GET STORED STATUS
  417.        LDPK 0              RESET DP TO ZERO
  418.        AND  8              COMPARE DP BIT
  419.        BZ   OTHERR         IF = 0 THEN ERROR
  420.        LAR  0,7            SET AR0 TO 0
  421.        ZALS 6              GET THE DATA PATTERN >5555
  422.        SACL 0              AND PUT IT IN REG 0
  423.        DMOV *              MOVE VALUE FROM REG 0 TO 1
  424.        ZALS *+             COMPARE ACC WITH ORIGINAL VALUE
  425.        XOR  *,1            TO DMOV VALUE
  426.        BNZ  OTHERR         IF <> 0 THEN ERROR
  427.        LACK >FF            GET PUSH TEST VALUE
  428.        SACL 0              KEEP IT FOR LATER
  429.        PUSH                PUSH IT TO THE STACK
  430.        ZAC                 CLEAR THE ACC
  431.        POP                 POP THE TEST VALUE AND COMPARE
  432.        XOR  0              IT TO TEST VALUE
  433.        BNZ  OTHERR         IF <> 0 THEN ERROR
  434.        LACK RAMPT4         GET ADDRESS OF RAM PATTERN
  435.        SACL 0              SET RAM PATTERN TO 0
  436.        LACK RAMLP0         GET ADDRESS OF RAM CHECK PROGRAM
  437.        CALA                CHECK CALA INSTRUCTION
  438.        B    ENDTST         FINISHED TEST
  439. OTHERR LACK >50            SET VALUE FOR ERROR CODE
  440.        SACL 2              SHIFT THE ERROR VALUE 8
  441.        LAC  2,8            BITS TO GET ERROR CODE >5000
  442.        B    ERROR          AND EXIT TO ERROR ROUTINE
  443.        PAGE
  444. *                                                          *
  445. *   PROGRAM EXITS                                          *
  446. *                                                          *
  447. ERROR  EQU  $
  448.        SACL 0              SAVE ERROR CODE
  449. ENDTST CALL OUT            BRANCH TO OFF-CHIP MEMORY
  450. INTRPT EQU  1538           ADDRESS OF INTRPT VECTOR
  451. OUT    EQU  1536           ADDRESS OF OFF CHIP PROGRAM START
  452.        END
  453.